package com.sxbbc.common.core.service.system.redis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSONObject;
import com.sxbbc.common.basics.service.redis.RedisUtilsService;
import com.sxbbc.common.basics.utils.date.DateUtil;
import com.sxbbc.common.core.entity.jz.ActivitySeckill;
import com.sxbbc.common.core.entity.jz.ActivitySeckillDetail;
import com.sxbbc.common.core.enums.redis.RedisExpiredEnums;

/**
 * 设置秒杀商品redis
 *
 * @author arno
 */
@Service
public class RedisSeckillService {

    @Autowired
    private RedisUtilsService redisUtilsService;

    /**
     * 设置还未开始的秒杀活动
     * 就是活动开始时间小于当前时间的 我加入缓存，到时间 会自动将活动加入到有效序列中
     *
     * @param seckill
     */
    public void setWillBegin(ActivitySeckill seckill) {
        long second = (seckill.getBeginTime().getTime() - DateUtil.getInstance().currentTimeMillis()) / 1000;
        redisUtilsService.setKey(RedisExpiredEnums.SECKILL_WILL_PRO.getKey() + seckill.getId(), String.valueOf(seckill.getId()), second);
    }

    /**
     * 移除即将开始秒杀活动的主项记录
     *
     * @param skid 秒杀主表id
     */
    public void removeWillBegin(Integer skid) {
        redisUtilsService.deleteKey(RedisExpiredEnums.SECKILL_WILL_PRO.getKey() + skid);
    }

    /**
     * 设置秒杀有效活动开始
     * 同一时间段一个sku信息自能存在一条数据
     *
     * @param d
     */
    public void setSkDetail(ActivitySeckillDetail d) {
        long second = (d.getOverTime().getTime() - DateUtil.getInstance().currentTimeMillis()) / 1000;
        redisUtilsService.setKey(RedisExpiredEnums.SECKILL_PRO.getKey() + d.getSkuId(), JSONObject.toJSONString(d), second);
    }

    /**
     * 移除已经在活动队列中的秒杀信息
     *
     * @param skuId 商品详情id
     */
    public void removeSkDetail(Integer skuId) {
        redisUtilsService.deleteKey(RedisExpiredEnums.SECKILL_PRO.getKey() + skuId);
    }
}
